Быстрый старт¶
В этом руководстве приведена инструкция по ручному разворачиванию отказоустойчивой системы из двух кластеров Tarantool Data Grid (TDG) с использованием Tarantool Clusters Federation (TCF). Узнать больше об архитектуре и элементах TCF вы можете на странице Архитектура.
Руководство включает следующие шаги:
Подготовка окружения¶
Подготовка виртуальных машин¶
Для руководства необходимо подготовить две виртуальные машины, которые могут взаимодействовать между собой по сети. Поддерживаемые операционные системы описаны в разделе Программные требования.
Предположим, что виртуальные машины имеют следующие IP-адреса:
192.168.64.9
На данной виртуальной машине будут запущены:
Активный кластер TDG (Cluster A), состоящий из одного узла.
TCF Gateway – для отправки изменений с Cluster A на Cluster B.
TCF Destination – для применения изменений, пришедших с Cluster B на Cluster A.
etcd – для хранения состояния кластеров.
192.168.64.12
На данной виртуальной машине будут запущены:
Пассивный кластер TDG (Cluster B), состоящий из одного узла.
TCF Gateway – для отправки изменений с Cluster B на Cluster A.
TCF Destination – для применения изменений, пришедших с Cluster A на Cluster B.
Установка Tarantool Enterprise Edition и etcd¶
Перед разворачиванием кластеров TDG и TCF установите следующее программное обеспечение:
Tarantool Enterprise Edition на обе виртуальные машины.
etcd на первую виртуальную машину (
192.168.64.9
в данном руководстве).
Запуск etcd¶
Перед запуском и настройкой кластеров необходимо запустить etcd, установленный на первой виртуальной машине (192.168.64.9
в данном руководстве):
Установите для переменной окружения
ETCD_ENABLE_V2
значениеtrue
:$ export ETCD_ENABLE_V2=true
Запустите etcd с флагами
–listen-client-urls
и-advertise-client-urls
:$ etcd --listen-client-urls http://192.168.64.9:2379,http://127.0.0.1:2379 \ --advertise-client-urls http://192.168.64.9:2379
Скачивание TGZ-файлов для развертывания¶
TCF распространяется в виде TGZ-архива. Вам необходимо скачать следующие файлы в личном кабинете tarantool.io:
Сборку TDG, подготовленную для работы с TCF:
<tcf_version>-tdg-<tdg_version>.x86_64.tar.gz
.Сборку TCF:
tcf-<tcf_version>.tar.gz
.
Если у вас нет доступа к личному кабинету, свяжитесь с нами через форму обратной связи или напишите на sales@tarantool.io.
Запуск и настройка кластеров¶
Подготовка TGZ-файлов для развертывания¶
Скопируйте архив
<tcf_version>-tdg-<tdg_version>.x86_64.tar.gz
в домашние директории обеих виртуальных машин и распакуйте его:$ tar -xzf 0.2.0-tdg-2.11.1.0.x86_64.tar.gz
Скопируйте архив
tcf-<tcf_version>.tar.gz
в домашние директории обеих виртуальных машин и распакуйте его:$ tar -xzf tcf-0.2.0.tar.gz
Запуск активного кластера¶
Запустите активный кластер на первой виртуальной машине (192.168.64.9
в данном руководстве).
Для этого:
Перейдите в директорию
tdg
:$ cd tdg
Установите переменную окружения
TARANTOOL_CLUSTER_COOKIE
:$ export TARANTOOL_CLUSTER_COOKIE=tdg-cluster-cookie-1
Запустите кластер:
$ tarantool ./init.lua --bootstrap true
Создайте пользователя
db_user
и назначьте ему рольsuper
:tarantool> box.schema.user.create('db_user', { password = 'topsecret' }) --- ... tarantool> box.schema.user.grant('db_user', 'super') --- ...
Запуск пассивного кластера¶
Запустите пассивный кластер на второй виртуальной машине (192.168.64.12
в данном руководстве).
Для этого:
Перейдите в директорию
tdg
:$ cd tdg
Установите переменную окружения
TARANTOOL_CLUSTER_COOKIE
:$ export TARANTOOL_CLUSTER_COOKIE=tdg-cluster-cookie-2
Запустите кластер:
$ tarantool ./init.lua --bootstrap true
Создайте пользователя
db_user
и назначьте ему рольsuper
:tarantool> box.schema.user.create('db_user', { password = 'topsecret' }) --- ... tarantool> box.schema.user.grant('db_user', 'super') --- ...
Настройка активного кластера¶
Чтобы настроить активный кластер, запущенный на первой виртуальной машине (192.168.64.9
в данном руководстве):
Перейдите на
http://192.168.64.9:8080/
и откройте вкладку Cluster.Нажмите кнопку Failover: disabled в правом верхнем углу, установите Failover mode в Stateful и поменяйте настройки следующим образом:
State provider: выберите etcd в раскрывающемся списке.
Endpoints: поменяйте адреса следующим образом:
http://192.168.64.9:4001 http://192.168.64.9:2379
Prefix: поменяйте значение на
/cluster_a
.
Нажмите Apply, чтобы сохранить настройки.
Нажмите кнопку Edit replica set и поменяйте настройки:
Replica set name: введите произвольное название, например,
replicaset001
.Включите роль
tcf-coordinator
.
Нажмите Save.
Перейдите на вкладку TCF, нажмите кнопку Settings и поменяйте настройки следующим образом:
Cluster 1:
cluster_a
Cluster 2:
cluster_b
Initial status:
active
DML users:
db_user
Replication user:
replicator
Replication password:
foobar
Нажмите Save. Кластер должен перейти в активное состояние:
cluster_a: active cluster_b: unknown
Настройка пассивного кластера¶
Чтобы настроить активный кластер, запущенный на второй виртуальной машине (192.168.64.12
в данном руководстве):
Перейдите на
http://192.168.64.12:8080/
и откройте вкладку Cluster.Нажмите кнопку Failover: disabled в правом верхнем углу, установите Failover mode в Stateful и поменяйте настройки следующим образом:
State provider: выберите etcd в раскрывающемся списке.
Endpoints: поменяйте адреса следующим образом:
http://192.168.64.9:4001 http://192.168.64.9:2379
Prefix: поменяйте значение на
/cluster_b
.
Нажмите Apply, чтобы сохранить настройки.
Нажмите кнопку Edit replica set и поменяйте настройки:
Replica set name: введите произвольное название, например,
replicaset002
.Включите роль
tcf-coordinator
.
Нажмите Save.
Перейдите на вкладку TCF, нажмите кнопку Settings и поменяйте настройки следующим образом:
Cluster 1:
cluster_b
Cluster 2:
cluster_a
Initial status:
passive
DML users:
db_user
Replication user:
replicator
Replication password:
foobar
Нажмите Save. Кластер должен перейти в пассивное состояние:
cluster_b: passive cluster_a: active
Создание модели данных¶
Чтобы создать модель данных, в веб-интерфейсе обоих кластеров повторите следующие шаги:
В меню слева откройте вкладку Model.
Вставьте следующую модель в поле Request и нажмите Submit:
[ { "name": "MusicBand", "type": "record", "fields": [ {"name": "name", "type": "string"}, {"name": "genre", "type": {"type":"array", "items":"string"}}, {"name": "wasformed", "type":"long"} ], "indexes": ["name", "genre", "wasformed"] }, { "name": "Artist", "type": "record", "fields": [ {"name": "fullname", "type": "string"}, {"name": "country", "type": "string"}, {"name": "instruments", "type": {"type":"array", "items":"string"}} ], "indexes": ["fullname"] } ]
При успешном вставке модели в поле Response вернется ответ
OK
.
Добавление данных на активном кластере¶
Добавьте данные на активном кластере следующим образом:
Перейдите на
http://192.168.64.9:8080/
и откройте вкладку Graphql.В поле запроса вставьте данные и нажмите кнопку Execute query:
mutation all { rammstein:MusicBand(insert: { name: "Rammstein", genre: ["metal", "industrial", "gothic"], wasformed: 1994}) { name genre wasformed } linkinpark:MusicBand(insert: { name: "Linkin Park", genre: ["alternative", "metal"], wasformed: 1996}) { name genre wasformed } }
Конфигурирование и запуск репликаторов данных¶
Конфигурирование репликаторов¶
Чтобы сконфигурировать репликаторы, повторите следующие шаги на обеих виртуальных машинах:
Создайте файл
config_a_b.yaml
в домашней директории и вставьте следующую конфигурацию для репликации данных с Cluster A на Cluster B:gateway: grpc_server: host: 192.168.64.9 port: 10080 replica_type: anonymous stream_instances: - uri: 192.168.64.9:3301 user: replicator password: foobar destination: gateway: host: 192.168.64.9 port: 10080 vshard_routers: hosts: - "192.168.64.12:3301" user: replicator password: foobar
Создайте файл
config_b_a.yaml
в домашней директории и вставьте следующую конфигурацию для репликации данных с Cluster B на Cluster A:gateway: grpc_server: host: 192.168.64.12 port: 10080 replica_type: anonymous stream_instances: - uri: 192.168.64.12:3301 user: replicator password: foobar destination: gateway: host: 192.168.64.12 port: 10080 vshard_routers: hosts: - "192.168.64.9:3301" user: replicator password: foobar
Запуск репликатора Cluster A -> Cluster B¶
На первой виртуальной машине (
192.168.64.9
в данном руководстве) запустите TCF Gateway для отправки изменений с Cluster A на Cluster B:$ ./tcf-gateway --config config_a_b.yaml
На второй виртуальной машине (
192.168.64.12
в данном руководстве) запустите TCF Destination для применения изменений, пришедших с Cluster A на Cluster B:$ ./tcf-destination --config config_a_b.yaml
Запуск репликатора Cluster B -> Cluster A¶
На второй виртуальной машине (
192.168.64.12
в данном руководстве) запустите TCF Gateway для отправки изменений с Cluster B на Cluster A:$ ./tcf-gateway --config config_b_a.yaml
На первой виртуальной машине (
192.168.64.9
в данном руководстве) запустите TCF Destination для применения изменений, пришедших с Cluster B на Cluster A:$ ./tcf-destination --config config_b_a.yaml
Проверка репликации данных¶
Чтобы проверить успешную репликацию данных с Cluster A на Cluster B:
Перейдите на
http://192.168.64.12:8080/
и откройте вкладку Graphql.Сделайте следующий запрос:
query { MusicBand(name:"Linkin Park") { name wasformed genre } }
В поле ответа должен вернуться следующий результат:
{ "data": { "MusicBand": [ { "genre": [ "alternative", "metal" ], "name": "Linkin Park", "wasformed": 1996 } ] } }
Проверка переключения состояния кластера¶
Перейдите на вкладку TCF в веб-интерфейсе любого из кластеров.
Нажмите кнопку Toggle cluster states, чтобы сделать Cluster B активным. Статусы должны поменяться:
cluster_a: passive cluster_b: active
Попробуйте добавить или удалить данные на Cluster B на вкладке Graphql и убедитесь, что изменения успешно реплицируются на Cluster A.
Проверьте, что пассивный кластер заблокирован для
db_user
, с помощью команды tt connect:$ tt connect 192.168.64.9:3301 -u db_user -p topsecret • Connecting to the instance... ⨯ failed to run interactive console: failed to create new console: failed to connect: failed to authenticate: DML is blocked, cluster is passive (ClientError, code 0x1ff)